Code:
memoryDC = CreateCompatibleDC ( backDC );
To my knowledge this will get you a black and white DC due to the funny way memory DCs work. You should be using the desktop (screen) DC instead (change "backDC" to "NULL") for colour.
Code:
SelectObject ( memoryDC, asteroidBitmap );
Be careful! By not storing the return value here you are leaving a 1x1 black and white bitmap dangling out in the emptyness of memory. When a memory DC is created it has a bitmap, so in order to prevent a memory leak you should store the return value and select it back into the memory DC when your program exits.
Code:
SelectClipRgn ( memoryDC, asteroidRegion );
BitBlt ( backDC, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, memoryDC, 0, 0, SRCCOPY );
You should be selecting the clipping region into the back DC. BitBlt will then respect the region when you copy from the memory DC. There should also be the top-left coordinates and the total width and height of the asteroid for the second to fifth parameters of BitBlt, so if the asteroid was at 10, 10 and was 32x16 you'd have:-
Code:
BitBlt (backDC, 10, 10, 32, 16, memoryDC, 0, 0, SRCCOPY);